package com.example.mymvvmdemo.utils;

import android.content.Context;
import android.graphics.Bitmap;
import android.net.Uri;
import android.widget.ImageView;

import com.bumptech.glide.Glide;
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
import com.bumptech.glide.request.RequestOptions;
import com.example.mymvvmdemo.diyview.GlideCircleTransform;

/**
 * Glide工具类
 */
public class GlideUtils {

    private static GlideCircleTransform glideCircleTransform = new GlideCircleTransform();

    private GlideUtils() {
    }


    /**
     * 加载gif
     */
    public static void loadGitImage(Context context, int url, ImageView iv) {
        try {
            Glide.with(context)
                    .asGif()
                    .load(url)
                    .into(iv);
        } catch (Exception e) {
            LogUtils.e("glideutils loadGitImage error:" + e.getMessage());
        }
    }

    /**
     * 加载有圆角替换图的Glide方法
     *
     * @param context  context
     * @param url      url图片
     * @param emptyImg url图片为空时的替换图
     * @param radio   圆角半径
     * @param iv       target iv
     */
    public static void loadRoundImage(Context context, int url, int emptyImg, int radio, ImageView iv) {
        try {
            //原生 API
            RequestOptions options = new RequestOptions()
                    .placeholder(emptyImg)
                    .bitmapTransform(new RoundedCorners(radio));
            Glide.with(context).load(url)
                    .apply(options).into(iv);
        } catch (Exception e) {
            LogUtils.e("glideutils loadimage2 error:" + e.getMessage());
        }
    }

    /**
     * 加载有圆角替换图的Glide方法
     *
     * @param context  context
     * @param url      url图片
     * @param emptyImg url图片为空时的替换图
     * @param iv       target iv
     */
    public static void loadRoundImage(Context context, String url, int emptyImg, int radio, ImageView iv) {
        try {
            //原生 API
            RequestOptions options = new RequestOptions()
                    .placeholder(emptyImg)
                    .bitmapTransform(new RoundedCorners(radio));
            Glide.with(context).load(url)
                    .apply(options).into(iv);
        } catch (Exception e) {
            LogUtils.e("glideutils loadimage2 error:" + e.getMessage());
        }
    }

    /**
     * 加载有圆角替换图的Glide方法
     *
     * @param context  context
     * @param url      url图片
     * @param emptyImg url图片为空时的替换图
     * @param iv       target iv
     */
    public static void loadRoundImage(Context context, Bitmap url, int emptyImg, int radio, ImageView iv) {
        try {
            //原生 API
            RequestOptions options = new RequestOptions()
                    .placeholder(emptyImg)
                    .bitmapTransform(new RoundedCorners(radio));
            Glide.with(context).load(url)
                    .apply(options).into(iv);
        } catch (Exception e) {
            LogUtils.e("glideutils loadimage2 error:" + e.getMessage());
        }
    }

    /**
     * 加载有圆角替换图的Glide方法
     *
     * @param context  context
     * @param url      url图片
     * @param emptyImg url图片为空时的替换图
     * @param iv       target iv
     */
    public static void loadRoundImage(Context context, String url, int emptyImg, ImageView iv) {
        if (glideCircleTransform == null) {
            glideCircleTransform = new GlideCircleTransform();
        }
        try {
            //原生 API
            RequestOptions options = new RequestOptions()
                    .placeholder(emptyImg);
            Glide.with(context).load(url)
                    .transform(glideCircleTransform)
                    .apply(options).into(iv);
        } catch (Exception e) {
            LogUtils.e("glideutils loadimage2 error:" + e.getMessage());
        }
    }

    /**
     * 加载有替换图的Glide方法
     *
     * @param context  context
     * @param url      url图片
     * @param emptyImg url图片为空时的替换图
     * @param iv       target iv
     */
    public static void loadImage(Context context, String url, int emptyImg, ImageView iv) {
        try {
            //原生 API
            RequestOptions options = new RequestOptions()
                    .placeholder(emptyImg);
            Glide.with(context).load(url)
                    .apply(options).into(iv);
        } catch (Exception e) {
            LogUtils.e("glideutils loadimage2 error:" + e.getMessage());
        }
    }

    /**
     * 加载有替换图的Glide方法
     *
     * @param context  context
     * @param object   其他类型
     * @param emptyImg url图片为空时的替换图
     * @param iv       target iv
     */
    public static void loadImage(Context context, Object object, int emptyImg, ImageView iv) {
        try {
            //原生 API
            RequestOptions options = new RequestOptions()
                    .placeholder(emptyImg);
            Glide.with(context).load(object)
                    .apply(options).into(iv);
        } catch (Exception e) {
            LogUtils.e("glideutils loadimage3 error:" + e.getMessage());
        }
    }

    /**
     * 加载有替换图的Glide方法
     *
     * @param context  context
     * @param url      url图片
     * @param emptyImg url图片为空时的替换图
     * @param erroImg  加载错误时的替换图
     * @param iv       target iv
     */
    public static void loadImage(Context context, String url, int emptyImg, int erroImg, ImageView iv) {
        if (glideCircleTransform == null) {
            glideCircleTransform = new GlideCircleTransform();
        }
        try {
            //原生 API
            RequestOptions options = new RequestOptions()
                    .placeholder(emptyImg)
                    .error(erroImg);
            Glide.with(context).load(url)
                    .transform(glideCircleTransform)
                    .apply(options).into(iv);
        } catch (Exception e) {
            LogUtils.e("glideutils loadimage4 error:" + e.getMessage());
        }
    }

    /**
     * 加载无替换图的Glide方法
     *
     * @param context context
     * @param url     url图片
     * @param iv      target iv
     */
    public static void loadNoPlaceImage(Context context, String url, ImageView iv) {
        try {
            //原生 API
            Glide.with(context.getApplicationContext()).load(url).into(iv); //没有加加载失败的图片
        } catch (Exception e) {
            LogUtils.e("glideutils loadimage5 error:" + e.getMessage());
        }

    }

    /**
     * 加载URI图片
     *
     * @param context  context
     * @param uri      uri图片
     * @param emptyImg uri图片为空时的替换图
     * @param iv       target iv
     */
    public static void loadImage(Context context, Uri uri, int emptyImg, ImageView iv) {
        try {
            //原生 API
            RequestOptions options = new RequestOptions()
                    .placeholder(emptyImg);
            Glide.with(context).load(uri)
                    .apply(options).into(iv);
        } catch (Exception e) {
            LogUtils.e("glideutils loadUriImage error:" + e.getMessage());
        }
    }
}
